﻿using StockholmsStad.Data;
using StockholmsStad.Data.Context;
using StockholmsStad.Data.Interfaces;
using StockholmsStad.Runtime.Serialization.DataContract;
using StockholmsStad.Runtime.Serialization.DataContract.Enums;

namespace StockholmsStad.Business
{
    /// <summary>
    /// Gemensam basklass för att affärsobjekt
    /// </summary>
    public abstract class BusinessBase
    {
        private readonly IContextFactory contextFactory;

        /// <summary>
        /// Vilken databasagentfabrik som ska användas
        /// </summary>
        public IAgentFactory AgentFactory { get; set; }

        /// <summary>
        /// Den användare som utför operationen
        /// </summary>
        protected User CurrentUser { get; set; }

        /// <summary>
        /// Konstruktor för affärsobjektet
        /// </summary>
        /// <param name="user"></param>
        protected BusinessBase(User user)
        {
            CurrentUser = user;
            AgentFactory = new AgentFactory();
            contextFactory = new ContextFactory();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="useTransaction"></param>
        /// <returns></returns>
        public IDataContext GetDataContext(bool useTransaction)
        {
            return contextFactory.GetContext(useTransaction, CurrentUser != null ? CurrentUser.Role : UserRole.ReadOnly);
        }
    }
}
